package com.neusoft.neumooc.controller;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.neusoft.core.common.BaseController;
import com.neusoft.core.common.conf.Params;
import com.neusoft.neumooc.service.BackMenuService;
import com.neusoft.neumooc.vo.BackMenuVO;

@Controller
@RequestMapping("/backmenu")
public class BackMenuController extends BaseController {

    @Autowired
    private BackMenuService backMenuService;

    /**
     * 跳转到菜单列表页面
     */
    @RequestMapping("/list")
    public String list(Model model) {
        try {
            List<BackMenuVO> parentMenus = backMenuService.getParentMenus();
            model.addAttribute("parentMenus", parentMenus);
            
            // 获取每个父菜单的子菜单
            Map<String, List<BackMenuVO>> childMenusMap = new HashMap<>();
            for(BackMenuVO parent : parentMenus) {
                List<BackMenuVO> children = backMenuService.getChildMenus(parent.getMenuId());
                childMenusMap.put(parent.getMenuId(), children);
            }
            model.addAttribute("childMenusMap", childMenusMap);
        } catch (Exception e) {
            log.error("获取菜单列表失败", e);
        }
        return "menu/list";
    }

    /**
     * 跳转到添加菜单页面
     */
    @RequestMapping("/add")
    public String add(Model model) {
        try {
            List<BackMenuVO> parentMenus = backMenuService.getParentMenus();
            model.addAttribute("parentMenus", parentMenus);
        } catch (Exception e) {
            log.error("获取父菜单列表失败", e);
        }
        return "menu/add";
    }

    /**
     * 保存菜单
     */
    @ResponseBody
    @RequestMapping("/save")
    public Map<String, Object> save(BackMenuVO menu) {
        Map<String, Object> retMap = new HashMap<>();
        try {
            menu.setMenuId(UUID.randomUUID().toString().replace("-", ""));
            // 如果parentId为空字符串，设置为null
            if (menu.getParentId() != null && menu.getParentId().trim().isEmpty()) {
                menu.setParentId(null);
            }
            boolean result = backMenuService.addMenu(menu);
            if(result) {
                retMap.put(Params.RET_CODE, Params.RET_CODE_SUCCESS);
                retMap.put(Params.RET_MSG, "添加成功");
            } else {
                retMap.put(Params.RET_CODE, Params.RET_CODE_ERROR);
                retMap.put(Params.RET_MSG, "添加失败");
            }
        } catch (Exception e) {
            log.error("添加菜单失败", e);
            retMap.put(Params.RET_CODE, Params.RET_CODE_ERROR);
            retMap.put(Params.RET_MSG, "添加菜单失败");
        }
        return retMap;
    }

    /**
     * 删除菜单
     */
    @ResponseBody
    @RequestMapping("/delete")
    public Map<String, Object> delete(String menuId) {
        Map<String, Object> retMap = new HashMap<>();
        try {
            // 检查是否有子菜单
            List<BackMenuVO> children = backMenuService.getChildMenus(menuId);
            if(children != null && !children.isEmpty()) {
                retMap.put(Params.RET_CODE, Params.RET_CODE_ERROR);
                retMap.put(Params.RET_MSG, "该菜单下有子菜单,不能删除");
                return retMap;
            }
            
            boolean result = backMenuService.deleteMenu(menuId);
            if(result) {
                retMap.put(Params.RET_CODE, Params.RET_CODE_SUCCESS);
                retMap.put(Params.RET_MSG, "删除成功");
            } else {
                retMap.put(Params.RET_CODE, Params.RET_CODE_ERROR);
                retMap.put(Params.RET_MSG, "删除失败");
            }
        } catch (Exception e) {
            log.error("删除菜单失败", e);
            retMap.put(Params.RET_CODE, Params.RET_CODE_ERROR);
            retMap.put(Params.RET_MSG, "删除菜单失败");
        }
        return retMap;
    }

    /**
     * 跳转到编辑菜单页面
     */
    @RequestMapping("/edit")
    public String edit(String menuId, Model model) {
        try {
            // 获取要编辑的菜单信息
            BackMenuVO menu = backMenuService.getMenuById(menuId);
            model.addAttribute("menu", menu);
            
            // 获取所有父级菜单(不包括自己)
            List<BackMenuVO> parentMenus = backMenuService.getParentMenus();
            parentMenus.removeIf(m -> m.getMenuId().equals(menuId));
            model.addAttribute("parentMenus", parentMenus);
        } catch (Exception e) {
            log.error("获取菜单信息失败", e);
        }
        return "menu/edit";
    }

    /**
     * 更新菜单
     */
    @ResponseBody
    @RequestMapping("/update")
    public Map<String, Object> update(BackMenuVO menu) {
        Map<String, Object> retMap = new HashMap<>();
        try {
            boolean result = backMenuService.updateMenu(menu);
            if(result) {
                retMap.put(Params.RET_CODE, Params.RET_CODE_SUCCESS);
                retMap.put(Params.RET_MSG, "更新成功");
            } else {
                retMap.put(Params.RET_CODE, Params.RET_CODE_ERROR);
                retMap.put(Params.RET_MSG, "更新失败");
            }
        } catch (Exception e) {
            log.error("更新菜单失败", e);
            retMap.put(Params.RET_CODE, Params.RET_CODE_ERROR);
            retMap.put(Params.RET_MSG, "更新菜单失败");
        }
        return retMap;
    }
} 